package com.sky.service;

import com.sky.dto.*;
import com.sky.result.PageResult;
import com.sky.vo.OrderPaymentVO;
import com.sky.vo.OrderStatisticsVO;
import com.sky.vo.OrderSubmitVO;
import com.sky.vo.OrderVO;

/**
 * Author: Zheng
 * Date:   2024/2/26  9:48
 * Package：com.sky.service
 * Description：订单业务层接口
 * Version：1.0
 */
public interface OrdersService {
    /**
     * @description： 用户下单
     * @date：2024/2/26  16:14
     * @return：
     **/
    OrderSubmitVO submit(OrdersSubmitDTO ordersSubmitDTO);

    /**
     * @description： 订单支付
     * @date：2024/2/27  20:22
     * @return：
     **/
    OrderPaymentVO payment(OrdersPaymentDTO ordersPaymentDTO);

    /**
     * @description： 历史订单查询
     * @date：2024/2/27  20:33
     * @return：
     **/
    PageResult page(OrdersPageQueryDTO ordersPageQueryDTO);

    /**
     * @description： 订单详情查询
     * @date：2024/2/27  20:37
     * @return：
     **/
    OrderVO details(Long id);

    /**
     * @description： 取消订单
     * @date：2024/2/27  20:41
     * @return：
     **/
    void userCancelById(Long id);

    /**
     * @description： 再来一单
     * @date：2024/2/27  20:46
     * @return：
     **/
    void repetition(Long id);

    /**
     * @description： 支付成功
     * @date：2024/2/28  10:54
     * @return：
     **/
    void paySuccess(String outTradeNo);

    /**
     * @description： 管理端订单搜索
     * @date：2024/2/28  17:49
     * @return：
     **/
    PageResult conditionSearch(OrdersPageQueryDTO ordersPageQueryDTO);

    /**
     * @description： 接单
     * @date：2024/2/28  18:34
     * @return：
     **/
    void confirm(OrdersConfirmDTO ordersConfirmDTO);

    /**
     * @description： 各个状态的订单数量统计
     * @date：2024/2/28  18:47
     * @return：
     **/
    OrderStatisticsVO statistics();

    /**
     * @description： 拒单
     * @date：2024/2/28  20:08
     * @return：
     **/
    void rejection(OrdersRejectionDTO ordersRejectionDTO);

    /**
     * @description： 取消订单
     * @date：2024/2/28  21:09
     * @return：
     **/
    void cancel(OrdersCancelDTO ordersCancelDTO);

    /**
     * @description： 派送订单
     * @date：2024/2/28  21:25
     * @return：
     **/
    void delivery(Long id);

    /**
     * @description： 完成订单
     * @date：2024/2/28  21:39
     * @return：
     **/
    void complete(Long id);

    /**
     * @description： 用户催单
     * @date：2024/2/29  14:51
     * @return：
     **/
    void reminder(Long id);
}
